/**
 * ZHU framework. Copyright 2012-, all rights reserved.
 *
 * $Id: AbstractEntity.java 40 2012-09-13 01:38:05Z zhuxiaopeng $
 * $Revision: 40 $
 * $Date: 2012-09-13 09:38:05 +0800 (四, 2012-09-13) $
 * $Author: zhuxiaopeng $
 */
package zhu.framework.entity;

import java.io.*;

/**
 * <p>
 * </p>
 * 
 * @author $Author: zhuxiaopeng $
 * @version $Revision: 40 $ - $Date: 2012-09-13 09:38:05 +0800 (四, 2012-09-13) $
 */
public abstract class AbstractEntity implements Entity, Serializable {

	/**
	 * <h3>スレッドセーフ性</h3>
	 * <p>
	 * この変数は<code>this</code>によってGuardされる。 この変数は<code>final</code>
	 * であり、参照先がスレッドセーフであるため、スレッドセーフ性を破ることはない。
	 * この変数の参照先はスレッドセーフ<strong>ではない</strong>。
	 * </p>
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public boolean equals(final Object obj) {
		if (obj == null) {
			return false;
		}
		if (obj instanceof Entity == false) {
			return false;
		}
		if (getClass().equals(obj.getClass()) == false) {
			return false;
		}
		if (getEntityId() == null) {
			return this == obj;
		}
		return getEntityId().equals(((Entity) obj).getEntityId());
	}

	@Override
	public int hashCode() {
		return getEntityId() != null ? getEntityId().hashCode() : 0;
	}
}
